#include "Log.h"

Log * Log::instance = 0;

Log * Log::getInstance() {
	if (!instance){
		instance = new Log();
		instance->nuevo = true;
	}
	return instance;
}

/**
 *	@return: Devuelve fecha y hora actual
 */
string Log::getDateTimeNow(){
	time_t now = time(0);
	struct tm  tstruct;
	char buf[80];
	tstruct = *localtime(&now);
	strftime(buf, sizeof(buf), "%Y-%m-%d %X", &tstruct);
	return buf;
}

/**
 *	Escribe en el archivo de texto el mensaje enviado por parametro
 *	@return: Devuelve 1 si se produjo algun error, 0 en caso contrario
 */
int Log::write(string message, string tipo){

	ofstream file;

	if(nuevo){
		file.open("LOG.log", ios_base::out);
		nuevo = false;
	}
	else{
		file.open("LOG.log", ios_base::app);
	}
	
	
	try {
		if (!file){	
			error = "No se ha podido abrir el archivo";
			return 1;
		}
		file << getDateTimeNow() << ": "<< tipo << " - " << message << "\n" ;
		file.close();
		return 0;
	}
	catch( char * str ) {
		error = strcat("ERROR : ", str); 
		return 1;
	}
};

/**
 *	Escribe en el archivo de texto el mensaje enviado por parametro
 *	@return: Devuelve 1 si se produjo algun error, 0 en caso contrario
 */
int Log::ERROR(string message){
	return write(message, "ERROR  ");
}
/**
 *	Escribe en el archivo de texto el mensaje enviado por parametro
 *	@return: Devuelve 1 si se produjo algun error, 0 en caso contrario
 */
int Log::WARNING(string message){
	return write(message, "WARNING");
}

/**
 *	Escribe en el archivo de texto el mensaje enviado por parametro
 *	@return: Devuelve 1 si se produjo algun error, 0 en caso contrario
 */
int Log::INFO(string message){
	return write(message, "INFO   ");
}

/**
 *	@return: Devuelve descripcion del error
 */
string Log::getERROR(){
	return error;
}

Log::~Log(){
}
